cups printbackend: Plug memory leaks
authorMatthias Clasen <mclasen@redhat.com>
Fri, 12 Aug 2022 22:44:25 +0000 (18:44 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 12 Aug 2022 22:44:25 +0000 (18:44 -0400)
This loop has many early exits, and all of them
need to free this info object that gets allocated
at the beginning.

modules/printbackends/gtkprintbackendcups.c

index 00ffc00f73eea4ac2befad035640d8f34307f3ed..9a713da0e404c00f0c03cc8456102bb5f8e003f3 100644 (file)
@@ -3726,7 +3726,10 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
         attr = ippNextAttribute (response);
 
       if (attr == NULL)
-        break;
+        {
+          printer_setup_info_free (info);
+          break;
+        }
 
       while (attr != NULL && ippGetGroupTag (attr) == IPP_TAG_PRINTER)
         {
@@ -3737,6 +3740,7 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
       if (info->printer_name == NULL ||
          (info->printer_uri == NULL && info->member_uris == NULL))
         {
+          printer_setup_info_free (info);
           if (attr == NULL)
             break;
           else
@@ -3747,7 +3751,10 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
       iter = g_list_find_custom (GTK_PRINT_BACKEND_CUPS (backend)->temporary_queues_removed,
                                  info->printer_name, (GCompareFunc) g_strcmp0);
       if (iter != NULL)
-        continue;
+        {
+          printer_setup_info_free (info);
+          continue;
+        }
 
       if (info->got_printer_type)
         {